#include <iostream>
#include <regex>
#include <string>

int main()
{
    // HTTP报头格式  GET  /url  HTTP/1.1\r\n
    std::string src = "POST /online_gobang.login.html?uer=1234&passwd=123456 HTTP/1.1\r\n"; //\r\n需要单独处理
    std::smatch matchs;
    std::regex r("(GET|POST|HEAD|PUT|DELETE) ([^?]*)(?:\\?(.*))? (HTTP/1\\.[01])(?:\n|\r\n)?"); // .表示除 \r\n的任意字符
    // [^?] 表示非?字符, *表示匹配0次或者多次
    // \\?(.*) \\?表示原始的?字符， .*表示匹配0次或者多次 直到空格结束
    // HTTP/1\\.[01]  \\. -> 表示使用原始的 . 字符，  [01]表示匹配 0 | 1 的字符
    // (?:\n|\r\n)?  ?: 表示 括号，原本捕捉，使用这个表示匹配括号里面的内容但是不捕捉,后面的 ? 表示匹配前面的表达式0次或者多次 有也表示成功，没有也表示成功
    bool ret = std::regex_match(src, matchs, r);
    if (ret == false)
    {
        return -1;
    }

    for (int i = 0; i < matchs.size(); i++)
    {
        std::cout << "[" << i << "]"
                  << ":" << matchs[i] << std::endl;
    }
    return 0;
}